﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using pttk_htt_hr.DTO;
using pttk_htt_hr.Constant;
using System.Data;

namespace pttk_htt_hr.DAO
{
    class ThucDonTuanToiDAO
    {
        #region Select
        /// <summary>
        /// Mục đích: Lấy data của 1 danh sách thực đơn tuần tới
        /// </summary>
        /// <param name="PLTDTTparams">Lấy data từ PHIEU_LAP_TD_TUAN_TOI </param>
        /// <param name="CTPLTDTTparams">Lấy data từ CHI_TIET_PHIEU_LAP_TD_TUAN_TOI</param>
        /// <returns>ThucDonTuanToiDTO</returns>


        public static ThucDonTuanToiDTO Lay_ThucDonTuanToi(List<SqlParameter> PLTDTTparams, List<SqlParameter> CTPLTDTTparams)
        {
            ThucDonTuanToiDTO tdtt = new ThucDonTuanToiDTO();

            tdtt.PhieuLapThucDonTuanToi = PhieuLapThucDonTuanToiDAO.Lay_PhieuLapThucDonTuanToi(PLTDTTparams);
            tdtt.ListChiTietPhieuLapThucDonTuanToi = ChiTietPhieuLapThucDonTuanToiDAO.Lay_DanhSach_LstDic_ChiTietPhieuLapThucDonTuanToi(CTPLTDTTparams);

            return tdtt;
        }
        #endregion

        #region Insert
        /// <summary>
        /// Mục đích: Lưu 1 danh sách thực đơn cho tuần tới
        /// Bước 0: Lấy Next Index
        /// Bước 1: Insert data vào PHIEU_LAP_TD_TUAN_TOI
        /// Bước 2: Insert data vào CHI_TIET_PHIEU_LAP_TD_TUAN_TOI
        ///     Điều kiện: Nếu bước 1 thành công
        /// Result: 0 -> execture sp OK. Else -> -1
        /// </summary>
        /// <param name="PLTDTTparams">dùng để insert vào bảng PHIEU_LAP_TD_TUAN_TOI</param>
        /// <param name="CTPLTDTTparams">dùng để insert vào bảng CHI_TIET_PHIEU_LAP_TD_TUAN_TOI</param>
        /// <returns>Int</returns>
        public static int Them_ThucDonTuanToi(List<SqlParameter> PLTDTTparams, List<List<SqlParameter>> CTPLTDTTparams, List<SqlParameter> Deleteparams)
        {
            int result = 0;

            /*
             *  Bước 1: Insert vào bảng PHIEU_LAP_TD_TUAN_TOI
             */
            int PLTDTTres = PhieuLapThucDonTuanToiDAO.Them_PhieuLapThucDonToi(PLTDTTparams);

            /*
             *  Bước 2: Insert vào bảng CHI_TIET_PHIEU_LAP_TD_TUAN_TOI
             */

            if (PLTDTTres != -1)
            {
                int CTPLTDTTres = ChiTietPhieuLapThucDonTuanToiDAO.Them_ChiTietPhieuLapThucDonToi(CTPLTDTTparams);

                // Nếu insert CTPLTDTTres thất bại thì xóa cái insert ở bước 1 
                if (CTPLTDTTres == -1)
                {
                    // Delete MaPLTDTT PhieuLapThucDonTuanToi (have just insert, above)
                    PhieuLapThucDonTuanToiDAO.Delete_PhieuLapThucDonToi(Deleteparams);
                    // set result is failure
                    result = -1;
                }
                result = CTPLTDTTres;
            }

            return result;
        }

        #endregion

        #region Update

        #endregion

        #region Delete
        public static int DeleteAll_ThucDonTuanToi(List<List<SqlParameter>> PLTDTTparams, List<List<SqlParameter>> CTPLTDTTparams)
        {
            int res = 0;
            int del_child = ChiTietPhieuLapThucDonTuanToiDAO.DeleteAll_ChiTietPhieuLapThucDonToi(CTPLTDTTparams);
            int del_parent = PhieuLapThucDonTuanToiDAO.DeleteAll_PhieuLapThucDonToi(PLTDTTparams);

            if ((del_child !=0 ) || (del_parent !=0))
            {
                res = -1;
            }

            return res;
        }
        #endregion

        #region Others
        /// <summary>
        /// Mục đích: Lấy Next Index
        /// </summary>
        /// <returns>int = Next index </returns>

        public static int GetNextMaPLTDTT()
        {
            DBMS dbms = new DBMS();
            dbms.Connect();

            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter(ParameterConstant.TABLE_NAME,TableConstant.PHIEU_LAP_TD_TUAN_TOI));

            int NextID = dbms.ExcuteProcedure_NextID(StoreProcedureConstant.SP_GET_NEXT_ID, parameters.ToArray());

            dbms.Disconnect();
            return NextID;
        }
        #endregion
    }
}
